package com.shop.cereshop.app.tencent.im.service;

import com.shop.cereshop.app.tencent.im.model.redpacket.*;
import com.shop.cereshop.commons.result.Result;

import java.util.List;

public interface RedPacketService {

    /**
     * 创建红包
     * @param param 创建红包参数
     * @return  创建的红包
     */
    Result<RedPacketVO> create(CreateRedPacketParam param);

    /**
     * 支付并发送红包消息 (钱包支付)
     * @param param   发送红包参数
     * @return  发送结果
     */
    Result<Void> send(SendRedPacketParam param);

    /**
     * 领取红包
     * @param param   领取红包参数
     * @return  领取结果
     */
    Result<Object> receive(ReceiveRedPacketParam param);

    /**
     * 修改发送给腾讯IM的红包历史信息
     * @param packetId  红包ID
     * @return  true：修改成功 false：修改失败
     */
    boolean modifyTimMsg(String packetId);

    /**
     * 查询红包详情
     * @param packetId  红包ID
     * @return  红包详情
     */
    Result<RedPacketDetailVO> detail(String packetId);

    /**
     * 发出的红包过期后，退还至用户钱包余额
     * @param packetId 红包ID
     * returns 退款结果
     */
    boolean refund(String packetId);

    /**
     * 判断红包是否过期且未领取
     * @param packetId  红包ID
     * @return  true：过期且未领取 false：未过期或已领取
     */
    boolean isExpiredAndNotReceived(String packetId);

    /**
     * 获取过期未领取的红包列表
     * @return 过期红包列表
     */
    List<RedPacket> getExpiredRedPackets();

    RedPacket findByOrderNo(String orderNo,Long buyerUserId);
}
